/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 周斌
 * Date: 2023-12-25
 * Time: 20:19
 */
public class Test {
    public static void main1(String[] args) {
        int[] nums = {3, 0, 1};
        //等差数列求和
        //n的前几项和  Sn = （(首项+尾项)*项数)/2
        int n = nums.length;//项数
        int Sn = ((1 + n) * n) / 2;
        //遍历这个数组
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        //缺少值 = 等差数列总和 - 数组总和
        int tmp = Sn - sum;
        System.out.println(tmp);
    }
    //先在原来数组后面增加一个0-n的数组，前一个数组出现过一次的数字，后面那个数组也会出现一次，前面没出现的数字，后界就出现了一次。
    //这样题目就转换成在这两个数组中找只出现一次的数字，可以用异或来做，留下最后的就是只出现一次的数字。
    public static void main(String[] args) {
        int[] nums = {3, 0, 1};
        int xor = 0;
        int n = nums.length;
        //在前一个数组中异或
        for (int i = 0; i < n; i++) {
            xor ^= nums[i];
        }
        //在后一个增加的数组中异或，最后xor的值就是出现过一次的数字。
        for (int i = 0; i <= n; i++) {
            xor ^= i;
        }
        System.out.println(xor);
    }
}